package pe.gob.mimp.web.controller;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import pe.gob.mimp.model.TablaParametrica;
import pe.gob.mimp.model.web.ReporteWeb;
import pe.gob.mimp.service.CombosService;
import pe.gob.mimp.service.EntidadService;

@Controller
@RequestMapping(value = "/reporte")
public class ReporteController {
	@Autowired
	private CombosService combos;
	private ReporteWeb reporte;
	@Autowired
	private EntidadService entidadService;
        private String tipo;

        public String getTipo() {
            return tipo;
        }

        public void setTipo(String tipo) {
            this.tipo = tipo;
        }
        

	@RequestMapping(method = RequestMethod.GET)
	public String showCasoForm(Model model, HttpServletRequest request) {
		ReporteWeb reporteWeb = new ReporteWeb();
		HttpSession session = request.getSession();

		if (session.getAttribute("login") == null) {
			return "redirect:login";
		}
                reporteWeb.setTipoBusqueda(request.getParameter("tipoBusqueda").toString());
                tipo=reporteWeb.getTipoBusqueda();
		reporteWeb.setDepartamento(combos.getListaDepartamento());
		reporteWeb.setMotivos(combos.getListaMotivo());
		reporteWeb.setTipocaso(combos.getListaTipoCaso());
		reporteWeb.setEntidades(entidadService.listadoEntidades());
		model.addAttribute("reporteWeb", reporteWeb);
		return "reporte";
	}

	@RequestMapping(value = "/test", method = RequestMethod.GET)
	public String test() {
		System.out.println("/reporte/create");
		return "redirect:/reporte";
	}

	@RequestMapping(method = RequestMethod.POST)
	public String grabaFormulario(Model model, ReporteWeb reporteWeb) {
		reporte = reporteWeb;
                if(tipo.equals("1")){
                    return "redirect:reporte/ejecutarreportecaso";
                }else{
                    return "redirect:reporte/ejecutarreportederivacion";
                }
	}

	@RequestMapping(value = "/ejecutarreportecaso", method = RequestMethod.GET)
	public ModelAndView generaCasoPDF(HttpServletRequest request)
			throws Exception {
		// System.out.println("fechaaaa: "+reporte.getIdDepartamento().toString());
		ModelAndView mv = null;
		try {
			System.out.println();
			Map<String, Object> model = new HashMap<String, Object>();
			model.put("bindfecespe", reporte.getFechaEspecifica());
			model.put("bindfecdesde", reporte.getFechaDesde());
			model.put("bindfechasta", reporte.getFechaHasta());
			model.put("bindiddepartamento",
					reporte.getIdDepartamento() == 0 ? null : reporte
							.getIdDepartamento().toString());
			model.put("bindidprovincia", reporte.getIdProvincia() == 0 ? null
					: reporte.getIdProvincia().toString());
			model.put("bindiddistrito", reporte.getIdDistrito() == 0 ? null
					: reporte.getIdDistrito().toString());
			model.put("bindidmotivo", reporte.getIdMotivo() == 0 ? null
					: reporte.getIdMotivo().toString());
			model.put("bindidtipocaso", reporte.getIdTipoCaso() == 0 ? null
					: reporte.getIdTipoCaso().toString());
			mv = new ModelAndView("pdfReportCasoSocial", model);
		} catch (Exception e) {
			System.out.println("Exception Occured  profileHandler-> " + e);
		}
		return mv;
	}

	@RequestMapping(value = "/ejecutarreportederivacion", method = RequestMethod.GET)
	public ModelAndView generaDerivacionPDF(HttpServletRequest request)
			throws Exception {
		// System.out.println("fechaaaa: "+reporte.getIdDepartamento().toString());
		ModelAndView mv = null;
		try {
			System.out.println();
			Map<String, Object> model = new HashMap<String, Object>();
			model.put("bindfecespe", reporte.getFechaEspecifica());
			model.put("bindfecdesde", reporte.getFechaDesde());
			model.put("bindfechasta", reporte.getFechaHasta());
			model.put("bindidentidad", reporte.getIdEntidad() == 0 ? null
					: reporte.getIdEntidad().toString());
			mv = new ModelAndView("pdfReportDerivacion", model);
		} catch (Exception e) {
			System.out.println("Exception Occured  profileHandler-> " + e);
		}
		return mv;
	}

	@RequestMapping(value = "/provincias", method = RequestMethod.GET)
	public @ResponseBody
	List<TablaParametrica> getProvincias(
			@RequestParam(value = "idDepartamento", required = true) Long idDepartamento) {
		TablaParametrica departamento;
		List<TablaParametrica> provincia = null;
		if (idDepartamento != 0) {
			departamento = combos.getDepartamentoPorId(idDepartamento);
			provincia = combos.getListaProvincia(departamento.getCodigo());
		}
		return provincia;
	}

	@RequestMapping(value = "/distritos", method = RequestMethod.GET)
	public @ResponseBody
	List<TablaParametrica> getDistritos(
			@RequestParam(value = "idProvincia", required = true) Long idProvincia) {
		TablaParametrica provincia;
		List<TablaParametrica> distrito = null;
		if (idProvincia != 0) {
			provincia = combos.getProvinciaPorId(idProvincia);
			distrito = combos.getListaDistrito(provincia.getCodigo());
		}
		return distrito;
	}

	// @RequestMapping(value = "/entidades", method = RequestMethod.GET)
	// public @ResponseBody
	// List<TablaParametrica> getEntidad() {
	// TablaParametrica provincia;
	// List<TablaParametrica> distrito = null;
	// if (idProvincia != 0) {
	// provincia = combos.getProvinciaPorId(idProvincia);
	// distrito = combos.getListaDistrito(provincia.getCodigo());
	// }
	// return distrito;
	// }

	public ReporteWeb getReporte() {
		return reporte;
	}

	public void setReporte(ReporteWeb reporte) {
		this.reporte = reporte;
	}

}
